CPU 686
BITS 32

%define EOI 20h ; define EOI como valendo 0x20
%define PIC1_CMD 20h
global _time_tick ; declara nome_var como acessível a módulos escritos em C
global _sec_tick
global _t0_isr ; o handler também deve ser global, para ser instalado

section .data ; .data é a zona de dados inicializados
_time_tick dd 0 ; declara variável com 4 bytes (dd) e inicializa-a com 0
_sec_tick dd 0

section .text ; .text é a zona de código
_t0_isr: ; deve ser global para ser acedida em módulos escritos em C
push eax ; todos os registos utilizados na rotina
push edx
push ecx
; instruções da rotina
mov eax, [_time_tick]
inc eax
mov [_time_tick], eax

cmp eax, 1000
jne fim
mov eax, 0
mov [_time_tick], eax
mov eax, [_sec_tick]
inc eax
mov [_sec_tick], eax

;mov ecx, 1000
;div ecx
;cmp edx, 0
;jne fim
;mov eax, [_sec_tick]
;inc eax
;mov [_sec_tick], eax

fim:
mov al, EOI ; sinaliza EOI para o PIC-1
out PIC1_CMD, al
pop ecx ; todos os registos guardados
pop edx
pop eax
iretd
END ; fim de código fonte assembly